package com.yyge.utils;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

/**
 * <p> 多次读写BODY用HTTP RESPONSE - 解决流只能读一次问题 </p>
 *
 * @author : gityyge
 * @description :
 * @date : 2019/10/12 15:42
 */
public class SecurityResponse extends HttpServletResponseWrapper {

    private ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    private HttpServletResponse response;

    /**
     *  和request包装类不同，构造器new出来的response包装类并没有保存流
     *
     * @param response
     * @throws IOException
     */
    public SecurityResponse(HttpServletResponse response) {
        super(response);
        response.setCharacterEncoding("UTF-8");
//        response.setContentType("application/json");
        this.response = response;
    }

//    public byte[] getBody() {
//        return byteArrayOutputStream.toByteArray();
//    }
//    /**
//     * 和request包装类不同，构造器new出来的response包装类并没有保存流
//     * 请求json数据用这个方法
//     * @param
//     * @throws IOException
//     */
//    @Override
//    public ServletOutputStream getOutputStream() {
//        return new ServletOutputStreamWrapper(this.byteArrayOutputStream, this.response);
//    }
//
//    /**
//     * 请求swagger过的html用这个方法
//     * @return
//     * @throws IOException
//     */
//    @Override
//    public PrintWriter getWriter() throws IOException {
//        return new PrintWriter(new OutputStreamWriter(getOutputStream(), this.response.getCharacterEncoding()));
//    }
//
//
//    @Data
//    @AllArgsConstructor
//    private static class ServletOutputStreamWrapper extends ServletOutputStream {
//
//        private ByteArrayOutputStream outputStream;
//        private HttpServletResponse response;
//
//        @Override
//        public boolean isReady() {
//            return true;
//        }
//
        /**
         *这个方法是干什么的
         */
//        @Override
//        public void setWriteListener(WriteListener listener) {
//
//        }
//
//        /**
//         * 同时也向byteArrayOutputStream写
//         * @param b
//         * @throws IOException
//         */
//        @Override
//        public void write(int b) throws IOException {
//            // 将b内容写入此流
//            this.outputStream.write(b);
//        }
//
//        @Override
//        public void flush() throws IOException {
//            if (!this.response.isCommitted()) {
//                byte[] body = this.outputStream.toByteArray();
//                ServletOutputStream outputStream = this.response.getOutputStream();
//                // 将body内容写入此流,写回到response中
//                outputStream.write(body);
//                outputStream.flush();
//                PrintWriter writer = this.response.getWriter();
//                writer.write(new String(body,this.response.getCharacterEncoding()));
//                writer.flush();
//            }
//        }
//    }
}
